package algorithm.problems.string;

/**
 * Created by gouthamvidyapradhan on 09/12/2017.
 * Given a non-empty string s, you may delete at most one character. Judge whether you can make it a palindrome.

 Example 1:
 Input: "aba"
 Output: True
 Example 2:
 Input: "abca"
 Output: True
 Explanation: You could delete the character 'c'.
 Note:
 The string will only contain lowercase characters a-z. The maximum length of the string is 50000.
 */
public class ValidPalindromeII {

    /**
     * Main method
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception{
        System.out.println(new ValidPalindromeII().validPalindrome("aaaaaab"));
    }

    public boolean validPalindrome(String s) {
        for(int i = 0, j = s.length() - 1; i < j;){
            if(s.charAt(i) == s.charAt(j)){
                i++; j--;
            } else {
                return isPaliandrome(s.substring(i, j)) || isPaliandrome(s.substring(i + 1, j + 1));
            }
        }
        return true;
    }

    private boolean isPaliandrome(String s){
        for(int i = 0, j = s.length() - 1; i < j;){
            if(s.charAt(i) == s.charAt(j)){
                i++; j--;
            } else return false;
        }
        return true;
    }
}
